#include "music_player.h"
#include <fstream>

//////////////////////////////////////////////////
//	MusicPlayer::MusicPlayer()
//////////////////////////////////////////////////
MusicPlayer::MusicPlayer() :
	currentSong(0),
	autoPlay(true),
	volume(100),
	volumeBeforeMute(100)
{
	loadPlaylist("materials/music/playlist.txt");
}

//////////////////////////////////////////////////
//	void MusicPlayer::update(double dt)
//////////////////////////////////////////////////
void MusicPlayer::update(double dt)
{
	if (autoPlay && music.getStatus() == sf::SoundSource::Status::Stopped)
	{
		nextSong();
	}
}

//////////////////////////////////////////////////
//	void MusicPlayer::play()
//////////////////////////////////////////////////
void MusicPlayer::play()
{
	if (currentSong >= 0 && currentSong < songList.size())
	{
		music.openFromFile(songList.at(currentSong));
		music.play();
	}
}

//////////////////////////////////////////////////
//	void MusicPlayer::stop()
//////////////////////////////////////////////////
void MusicPlayer::stop()
{
	music.stop();
}

//////////////////////////////////////////////////
//	void MusicPlayer::pause()
//////////////////////////////////////////////////
void MusicPlayer::pause()
{
	music.pause();
}

//////////////////////////////////////////////////
//	void MusicPlayer::nextSong()
//////////////////////////////////////////////////
void MusicPlayer::nextSong()
{
	stop();
	currentSong = (currentSong + 1)%songList.size();
	play();
}

//////////////////////////////////////////////////
//	void MusicPlayer::previousSong()
//////////////////////////////////////////////////
void MusicPlayer::previousSong()
{
	stop();

	if (currentSong > 0)
	{
		currentSong = (currentSong - 1)%songList.size();
	}
	else
	{
		currentSong = songList.size() - 1;
	}

	play();
}

//////////////////////////////////////////////////
//	void MusicPlayer::shuffle()
//////////////////////////////////////////////////
void MusicPlayer::shuffle()
{

}

//////////////////////////////////////////////////
//	void MusicPlayer::loadPlaylist(std::string filename)
//////////////////////////////////////////////////
void MusicPlayer::loadPlaylist(std::string filename)
{
	std::ifstream inFile;
	inFile.open(filename, std::ifstream::in);

	std::string songFilename;

	if (inFile.is_open())
	{
		while (std::getline(inFile, songFilename))
		{
			sf::Music songTest;

			if (songTest.openFromFile(songFilename))	// Loaded successfully
			{
				printf("Loaded song %s...\n", songFilename.c_str());
				songList.push_back(songFilename);
			}
		}
	}

	inFile.close();
}

//////////////////////////////////////////////////
//	void MusicPlayer::setVolume(float v)
//////////////////////////////////////////////////
void MusicPlayer::setVolume(float v)
{
	volume = v;

	if (volume > 100)
	{
		volume = 100;
	}
	else if (volume < 0)
	{
		volume = 0;
	}

	music.setVolume(volume);
}

//////////////////////////////////////////////////
//	void MusicPlayer::turnUpVolume()
//////////////////////////////////////////////////
void MusicPlayer::turnUpVolume()
{
	volume += volumeIncrement;

	if (volume > 100)
	{
		volume = 100;
	}

	music.setVolume(volume);
}

//////////////////////////////////////////////////
//	void MusicPlayer::turnDownVolume()
//////////////////////////////////////////////////
void MusicPlayer::turnDownVolume()
{
	volume -= volumeIncrement;

	if (volume < 0)
	{
		volume = 0;
	}

	music.setVolume(volume);
}

//////////////////////////////////////////////////
//	void MusicPlayer::mute()
//////////////////////////////////////////////////
void MusicPlayer::mute()
{
	volumeBeforeMute = volume;
	volume = 0;
	music.setVolume(volume);
}

//////////////////////////////////////////////////
//	void MusicPlayer::unmute()
//////////////////////////////////////////////////
void MusicPlayer::unmute()
{
	volume = volumeBeforeMute;
	music.setVolume(volume);
}